//
// Created by tiany on 2025/2/12.
//

#ifndef __BOOTLOADER_CFG_H
#define __BOOTLOADER_CFG_H

#include <stdint.h>

/**
 * 【 Bootloader 相关配置项】
 * 说明:
 * 该部分配置项用于定义与Bootloader相关的一些常量、结构体和全局变量。
 */

// 定义每个页的大小为1024字节，适用于STM32的Flash存储
#define STM32_PAGE_SIZE 1024

// OTA更新标志，用于指示是否有更新操作
#define OTA_SET_FLAG   0xAABB3344

// SPI Flash中的信息结构体，存储OTA相关的信息
typedef struct {
  uint32_t OTA_Flag;  // OTA操作的标志位，用于指示是否执行OTA更新
  uint32_t FileSize;  // 更新文件的大小，用于判断更新的完整性
} OTA_InfoCB;

typedef struct {
  uint8_t UpDataBuff[STM32_PAGE_SIZE];  // 用于存放更新的数据缓冲区
} UpDate_CB;

// OTA信息结构体的大小
#define OTA_INFO_SIZE sizeof(OTA_InfoCB)

// 用户的OTA信息存储地址，在Flash中的特定地址，便于查找
#define OTA_USER_INFO_MEMORY_ADDRESS 0x00300000

// 声明OTA相关的全局变量
extern OTA_InfoCB OTA_Info;  // 用于存储OTA相关的配置信息
extern UpDate_CB UpDate;     // 用于存储更新的数据

/**
 * 【 APP 相关配置项】
 * 说明:
 * 该部分配置项用于定义应用程序（APP）相关的一些常量和地址。
 */

// 用户应用程序的运行地址，一般在STM32的Flash中为指定位置
#define USER_APP_RUN_ADDRESS 0x08020000

#endif //__BOOTLOADER_CFG_H
